﻿using System.Threading.Tasks;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using MyCompanyName.AbpZeroTemplate.Authorization.Users.Dto;
using MyCompanyName.AbpZeroTemplate.Dto;
using System.Collections.Generic;
using System.Web.Http;

namespace MyCompanyName.AbpZeroTemplate.Authorization.Users
{
    public interface IUserAppService : IApplicationService
    {
        Task<PagedResultOutput<UserListDto>> GetPagedUsers(GetUsersInput input);

        // Task<PagedResultOutput<UserListDto>> GetUsers(string Filter, string Sorting, int start, int limit);

        List<UserListDto> GetUsers([FromUri]string name);
        List<dynamic> GetCustomers([FromUri]string name);
        List<dynamic> GetAllCustomers();

        Task<GetUserForEditOutput> Get();

        Task<List<UserListDto>> GetAll();
        string GetUserCompany(long userId);
        string GetUserName(long userId);


        Task SetUserRole(SetUserRoleInPut input);

        Task<FileDto> GetUsersToExcel();

        Task<GetUserForEditOutput> GetUserForEdit(NullableIdInput<long> input);

        Task<GetUserPermissionsForEditOutput> GetUserPermissionsForEdit(IdInput<long> input);



        Task<List<GetPermissionCheckTree>> GetUserPermission([FromUri]int userId);

        void InitPass([FromUri]int id);

        Task ResetUserSpecificPermissions(IdInput<long> input);

        Task UpdateUserPermissions(UpdateUserPermissionsInput input);

        Task CreateOrUpdateUser(CreateOrUpdateUserInput input);
        Task RemoveRoleUser(RemoveRoleUserInPut input);

        Task DeleteUser(IdInput<long> input);

        Task ChangeUserInfo(ChangeUserInfoInPut input);

        Task ImportUser();

        void GetUserImportTpl();
    }
}